package com.study.springboot2.entity;


import org.hibernate.annotations.GenericGenerator;

import javax.persistence.Column;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.MappedSuperclass;
import java.util.Date;

@MappedSuperclass
//1.标注为@MappedSuperclass的类将不是一个完整的实体类，他将不会映射到数据库表，但是他的属性都将映射到其子类的数据库字段中。
//2.标注为@MappedSuperclass的类不能再标注@Entity或@Table注解，也无需实现序列化接口。
public class BaseEntity {
    @Id
    //@GeneratedValue(strategy = GenerationType.AUTO)

    @GeneratedValue(generator = "jpa_uuid")
    @GenericGenerator(name = "jpa_uuid", strategy = "uuid")
    /**
     * 由于JPA默认的生成策略就是GenerationType.AUTO
     *
     * @GeneratorValue注解
     * GeneratorValue属于一个JPA接口，其接口下包含了两个抽象的参数：
     * 1. generator JPA 持续性提供程序为它选择的主键生成器分配一个名称,如果该名称难于处理、是一个保留字、与事先存在的数据模型不兼容或作为数据库中的主键生成器名称无效，则将 generator 设置为要使用的 String 生成器名称。
     * 2. strategy 指定生产策略
     * JPA提供的四种标准用法为TABLE,SEQUENCE,IDENTITY,AUTO. 
     *  TABLE：使用一个特定的数据库表格来保存主键。 
     *  SEQUENCE：根据底层数据库的序列来生成主键，条件是数据库支持序列。 
     *  IDENTITY：主键由数据库自动生成（主要是自动增长型） 
     *  AUTO：主键由程序控制。 
     *
     * @GenericGenerator(name = "jpa-uuid", strategy = "uuid") 和 @GeneratedValue(generator = "jpa-uuid")
     * 两个注解是生成策略核心注解。
     * @GenericGenerator 的如下属性意思：
     * name属性指定生成器名称。
     * strategy属性指定具体生成器的类名。
     *
     */
    protected String id;

    @Column(name= "create_date") //创建时间
            Date createDate = new Date();

    @Column(name= "update_date")//修改时间
            Date updateDate;

    public Date getCreateDate() {
        return createDate;
    }

    public void setCreateDate(Date createDate) {
        this.createDate = createDate;
    }

    public Date getUpdateDate() {
        return updateDate;
    }

    public void setUpdateDate(Date updateDate) {
        this.updateDate = updateDate;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }



}
